<?php
// 应用公共文件

if (!function_exists('generateToken')) {
    /**
     * 生成一个安全的令牌
     *
     * @return string 生成的64位十六进制字符的令牌
     */
    function generateToken()
    {
        // 使用random_bytes生成256位随机字节，并通过bin2hex转换为64位十六进制字符
        return bin2hex(random_bytes(32));
    }
}
if (!function_exists('responseData')) {
    /**
     * 构建响应数据函数
     *
     * 该函数用于构建和返回带有状态码、消息和数据的响应数组。可以根据类型参数决定返回值是数组格式还是JSON格式。
     *
     * @param int|array $code 状态码或一个包含状态码和消息的数组
     * @param string|array $msg 消息字符串或一个消息数组
     * @param string|array $data 数据内容，可以是字符串或数组
     * @param string $type 返回类型，'array'表示数组，'json'表示JSON格式
     * @return mixed 根据$type参数返回数组或JSON格式的数据
     */
    function responseData($code = 200, $msg = '', $data = [], $type = 'array')
    {
        // 从配置文件中获取应用的状态码配置
        $status = config('app.status_code');

        // 初始化响应数据数组
        $responseData = [];

        // 如果$code是数组，表示已经有完整的状态码和消息，直接使用200作为状态码
        if (is_array($code)) {
            $responseData['code'] = 200;
            $responseData['msg'] = $status[200];
			$responseData['data'] = $code;
            // 如果$msg非空且$data为'json'，则使用$msg作为消息
            if (!empty($msg) && $data == 'json') {
                $responseData['msg'] = $msg;
            }
            // 如果$msg或$data为'json'，则返回JSON格式的数据
            if (!empty($msg) && ($msg == 'json' || $data == 'json')) {
                return json($responseData);
            }
            return $responseData;
        }

        // 如果$code不是数组，则使用$code作为状态码
        $responseData['code'] = $code;
        $responseData['msg'] = $status[$code];
        // 如果$msg是'json'，则直接返回JSON格式的数据
        if ($msg == 'json') {
            return json($responseData);
        }
        // 如果$msg是非空字符串，将其追加到默认消息后面
        if (!empty($msg) && is_string($msg)) {
            $responseData['msg'] .= ': ' . $msg;
        }
        // 如果$data是非空字符串，将其追加到消息后面
        if (!empty($data) && is_string($data)) {
            $responseData['msg'] .= ': ' . $data;
        }
        // 如果$data是非空数组，将其作为数据部分加入响应
        if (!empty($data) && is_array($data)) {
            $responseData['data'] = $data;
        }
        // 如果$msg是非空数组，将其作为数据部分加入响应
        if (!empty($msg) && is_array($msg)) {
            $responseData['data'] = $msg;
        }
        // 如果$type为'json'，返回JSON格式的数据
        if ($type == 'json') {
            return json($responseData);
        }
        // 默认返回数组格式的响应数据
        return $responseData;
    }
}

if (!function_exists('is_mobile')) {
    function is_mobile(string $sign)
    {
        return preg_match('/^1[3456789]\d{9}$/', $sign);
    }
}

if (!function_exists('is_mobile')) {
    function is_email(string $sign)
    {
        // 验证邮箱
        return preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/', $sign);
    }
}

if (!function_exists('is_mobile')) {
    function is_username(string $sign)
    {
        return preg_match('/^[a-zA-Z][a-zA-Z0-9_]{6,15}$/', $sign);
    }
}
